iT邦幫忙

2024 iThome 鐵人賽

DAY 21
0
Python

Python大戰之網頁爬蟲系列 第 21

[Day 21] 存儲數據-pandas

  • 分享至 

  • xImage
  •  

我們在前幾個python的爬蟲實作中,都有獲取到我們想抓取的數據,
例如像是網頁內的數據或是自動化搜索的結果。

不過,我們似乎還沒有把蒐集到的資料彙整到一個資料庫內過,
這樣導致當我們要查看我們爬取到的資料時,不是排版的美觀不佳,
就是還要進入程式執行的區域觀看,相對來說還是比較麻煩的。

所以在今天的學習中,我們將要試著學習一個可以
處理和分析結構化數據的資料結構- pandas
並試著結合之前的實作產出成果。

安裝:

安裝的方式跟前幾個爬蟲模組一樣,
我們需要用Win + R開啟cmd (命令提示符窗口),
接著輸入安裝指令 pip install pandas:

https://ithelp.ithome.com.tw/upload/images/20241005/20169196vr9WEmbKPJ.png

接著對剛剛的安裝進行檢查:

undefinedhttps://ithelp.ithome.com.tw/upload/images/20241005/201691967B8zZ43OQW.png

我們使用 pip show pandas 來檢查剛剛的下載,
這邊就可以看到剛剛下載的版本及其他資訊,就代表我們有正確安裝了。

加入程式碼:

接著我們就要把pandas加入實作了,這邊先來看看完整的程式碼:

https://ithelp.ithome.com.tw/upload/images/20241005/20169196YappcPJWtJ.png

那不免俗的,我們還是要解釋一下新增的那些程式碼:

teacher_data = [ ]

這行代碼初始化了一個空的列表,名為 teacher_data,
用來存放抓取到的教師數據。

每當我們從網頁上抓取到一位教師的數據(包括姓名和職稱)時,
我們會將這些數據以字典的形式存入 teacher_data 列表中。

這樣做的好處是可以將所有教師的數據集中保存在一個列表中,
方便後續處理,就比如將這些數據保存到文件或者進行其他操作。

teacher_info = { 'name': name, 'title': title }

每次抓取到一位教師的姓名和職稱後,我們會將這些數據存放到一個字典中,
字典的鍵名為 'name''title'
對應的值分別是教師的名字和職稱。

self.save_to_csv()

在 parse 方法的最後,我們會調用 self.save_to_csv() 這個方法。
這個方法負責將我們存放在 teacher_data 列表中的所有教師數據
保存到一個 CSV 文件中。

這個函數的目的是確保在爬取完數據之後,
我們能夠持久化這些數據,便於後續分析或使用。

pd.DataFrame(self.teacher_data)

這行代碼使用 Pandas 的 DataFrame 函數,將 teacher_data 中的
所有教師數據轉換為一個 DataFrame。
(DataFrame 是 Pandas 提供的數據結構,可以看作是表格形式的數據容器)

df.to_csv('teachers.csv', index=False, encoding='utf-8')

這行代碼會將我們的 DataFrame 保存成一個 CSV 文件,
文件名稱是 'teachers.csv'。

index=False 則表示我們不需要將 DataFrame 的行索引保存到 CSV 文件中,
這樣可以避免在 CSV 中多出一列沒有意義的數字。

encoding='utf-8*' 則指定了文件的編碼方式,
可以確保文件中的中文字符不會出現亂碼,
這在我們處理中文字類數據時非常重要。

接著我們就對程式碼來執行了,跟前面一樣,我們要在cmd中使用指令
scrapy crawl itcast:

https://ithelp.ithome.com.tw/upload/images/20241005/20169196asZtl3Mbyl.png

再來我們就可以回到本機的資料夾中,看看有什麼變化了:

https://ithelp.ithome.com.tw/upload/images/20241005/201691963pclvZnT8A.png

我們就可以發現,在爬蟲資料夾中多了一個CSV檔案,
我們就直接把它用excel開啟來看看結果:

https://ithelp.ithome.com.tw/upload/images/20241005/20169196ycjoxbdci5.png

诶???我們發現了在EXCEL裡面顯示的是亂碼,
因此我去網路上查詢了為什麼會發生的原因,
發現可能是因為EXCEL軟體預設檔案編碼格式為 ANSI 編碼
導致沒辦法直接解讀。

因此這邊我們就換一種方式開啟:

首先我們從電腦內直接開啟Excel,創立新文件後找到上方的資料,
然後點選**「從文字/CSV」**來匯入檔案,如下圖:

https://ithelp.ithome.com.tw/upload/images/20241005/20169196Hp3Hpvj1dz.pnghttps://ithelp.ithome.com.tw/upload/images/20241005/20169196pj4QNJMykN.png

接著我們再來看看成果:

https://ithelp.ithome.com.tw/upload/images/20241005/20169196TkNeQKImQG.png

就可以看到,我們已經成功把我們抓取到的資料放入表格內,
這樣是不是就美觀許多了。

參考資料:

https://data.gov.tw/faqs/18765
https://support.microsoft.com/zh-tw/office/%E5%9C%A8-excel-%E4%B8%AD%E6%AD%A3%E7%A2%BA%E9%96%8B%E5%95%9F-csv-utf-8-%E6%AA%94%E6%A1%88-8a935af5-3416-4edd-ba7e-3dfd2bc4a032
https://blog.csdn.net/toshibahuai/article/details/79034829
https://utrustcorp.com/python-pandas/


上一篇
[Day 20] Scrapy爬蟲框架-2
下一篇
[Day 22] 爬蟲實戰 - ptt之NBA版
系列文
Python大戰之網頁爬蟲29
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言